Skip to content

docs: put Agent Locks on the front page (fold into the next release) - #59

Merged
drknowhow merged 1 commit into
mainfrom
docs/readme-agent-locks
Jul 31, 2026
Merged

docs: put Agent Locks on the front page (fold into the next release)#59
drknowhow merged 1 commit into
mainfrom
docs/readme-agent-locks

Conversation

@drknowhow

Copy link
Copy Markdown
Owner

Hold this until the next release, then merge it in. It is deliberately not its own release.

Why it exists

v2.65.0 shipped Agent Locks and published a PyPI page that never says the words. I wrote the spec, the changelog and the code, and skipped the front door — so the release whose headline feature is Agent Locks describes everything except Agent Locks.

Verified against the live API after publishing:

pypi latest: 2.65.0
  mentions "Agent Locks": False
  mentions "c3_locks":    False
  mentions "Access Guard": True

It can't be patched in place — PyPI bakes long_description into the artifact at build time, so fixing the page needs a new version. Rather than burn 2.65.1 on documentation, this rides along with whatever ships next.

What's in it

  • c3_locks row, and the tool count 20 → 21 — verified against the real registry (21 async def c3_* in cli/mcp_server.py, 21 table rows), not incremented by hand. That count has drifted before: the README once claimed 18 against a real 20.
  • c3_locks added to the plan-mode exception listacquire/release are writes.
  • An Agent Locks section, placed after Guards — which is where it belongs. Guards answer may the agent touch this?; locks answer is someone already touching it?
  • The Access Guard built-in opt-out, including the part that matters: two keys, so an agent that manages to write config.json still can't grant itself write access to ~/.claude/settings.json.

It keeps the coverage caveat the rest of the README uses rather than overselling: leases gate C3's own tool surfaces, and a raw c3_shell redirect, a non-Claude agent, or a human in an editor is not covered.

Checks

Docs only — no code paths touched. 1805 pass, ruff clean, and all three doc links (agent-locks.md, access-guard.md, mask-guard.md) resolve.

Tracked as C3 task so it isn't forgotten between releases.

https://claude.ai/code/session_01Sbd9NbQfDcoJvvURD7KCVf

v2.65.0 shipped Agent Locks and published a PyPI page that never says the
words. I wrote the spec, the changelog and the code and skipped the front
door, so the release whose headline feature is Agent Locks describes
everything except Agent Locks.

This cannot be patched in place -- PyPI bakes long_description into the
artifact at build time -- so it rides along with the next release rather than
burning a version on documentation.

Adds:
- a c3_locks row and the tool count 20 -> 21, verified against the real
  registry (21 `async def c3_*` in cli/mcp_server.py, 21 table rows) rather
  than incremented by hand. That count has drifted before.
- c3_locks to the list of tools that are NOT read-only in plan mode.
- an Agent Locks section after Guards, which is where it belongs: guards
  answer "may the agent touch this", locks answer "is someone already
  touching it".
- the Access Guard built-in opt-out, including the part that matters -- two
  keys, so an agent that writes config.json still cannot grant itself write
  access to ~/.claude/settings.json.

Keeps the coverage caveat the rest of the README uses: leases gate C3's own
tool surfaces, and a raw c3_shell redirect, a non-Claude agent, or a human in
an editor is not covered.

Docs only. 1805 pass, ruff clean, all three doc links resolve.

Claude-Session: https://claude.ai/code/session_01Sbd9NbQfDcoJvvURD7KCVf
@drknowhow
drknowhow marked this pull request as ready for review July 31, 2026 20:04
@drknowhow
drknowhow merged commit b457b80 into main Jul 31, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant